CSDV3017  ·  DEVOPS  ·  SCHOOL OF COMPUTER SCIENCE, UPES

Selecting Tools, Docker & Kubernetes, and IBM Case Study

Lecture 13 — exploring the modern DevOps toolbox, deep diving into containerization and orchestration, configuration management, and a real-world enterprise CI/CD adoption story at IBM.

InstructorDr. Mohsin Furkh Dar
SessionWeek 5 · Mon, 06 Jul 2026
Time14:00 – 15:00
UnitUnit V
I
II
III
IV
V
VI
VII
WELCOME TO UNIT V

Agenda: Diving into Tools

Unit IV Recap

Principles & DX

  • Version control, CI/CD fundamentals, deployment strategies
  • Infrastructure as Code, Continuous Monitoring (DORA metrics)
  • Digital transformation and DevOps as its core enabler
Lecture 13 · Today

Hands-on Tool Ecosystem

  • How to select the right tools (avoiding tool fatigue)
  • Containers vs VMs (Docker fundamentals)
  • Orchestration (Kubernetes architecture)
  • Configuration Management (Puppet vs Ansible)
  • IBM Case Study: Enterprise CI/CD transformation
THE TOOLCHAIN PARADOX

How to select the right DevOps tools

"A fool with a tool is still a fool. Process and culture must come first; the tool just automates the culture." — Grady Booch

Rule 01

Integration over Features

A tool with 80% of the features that integrates seamlessly with your existing stack is better than a 100% perfect tool that lives in a silo.

Rule 02

API-First

Every tool you select must have a robust REST or GraphQL API. If you can't automate interacting with the tool, it's not a DevOps tool.

Rule 03

Community & Talent

Choose tools with large ecosystems (like Kubernetes or Terraform). You'll find answers faster on StackOverflow and hire engineers more easily.

THE EVOLUTION

Virtual Machines vs. Containers

Feature Virtual Machines (VMware, EC2) Containers (Docker)
Architecture Hardware-level virtualization via Hypervisor OS-level virtualization (shares host kernel)
Guest OS Each VM includes a full, heavy Operating System No Guest OS; only app and dependencies
Startup Time Minutes (booting the entire OS) Milliseconds to seconds
Size / Weight Gigabytes (GBs) Megabytes (MBs)
Resource Usage Heavy overhead; pre-allocated resources Lightweight; uses only what it needs

The takeaway: Containers solved the "it works on my machine" problem by packaging the application and all its dependencies into a single, immutable artifact that runs exactly the same everywhere.

DOCKER FUNDAMENTALS

Docker core concepts

Dockerfile

The Recipe

A text file containing the step-by-step instructions (commands) to build a Docker Image. (e.g., FROM node:18, COPY . /app, RUN npm install).

Image

The Blueprint

The read-only template created by building the Dockerfile. It contains your app, runtime, and libraries. Images are stored in a Registry (e.g., Docker Hub).

Container

The Running App

A running instance of an Image. It has a writable layer on top. You can run hundreds of identical containers from one single image.

# The standard Docker workflow in 3 commands
$ docker build -t myapp:v1 .
$ docker push myregistry/myapp:v1
$ docker run -d -p 8080:80 myregistry/myapp:v1
THE NEXT PROBLEM

Why do we need Kubernetes?

Docker is great for running 1 or 5 containers on a single laptop or server. But what happens when you have a microservices architecture with 5,000 containers running across 200 servers?

The Challenges

Without Orchestration

  • How do containers talk to each other across different servers?
  • What if a server crashes? Who restarts those containers?
  • How do we load balance traffic?
  • How do we update to a new version without downtime?
The Solution

Kubernetes (K8s)

  • Automates deployment, scaling, and operations of application containers.
  • Originally developed by Google (based on Borg), now CNCF.
  • "The operating system of the cloud."
K8S ARCHITECTURE

How Kubernetes works

Control Plane (Master)

The Brain

  • API Server: The front-end; everything talks to this (via kubectl)
  • etcd: The distributed database storing cluster state
  • Scheduler: Decides which Worker Node runs which container
  • Controller Manager: Ensures desired state matches actual state (e.g., "I need 3 pods running")
Worker Nodes

The Muscle

  • Kubelet: The agent running on each node, listens to the Master
  • Kube-proxy: Maintains network rules and load balancing
  • Container Runtime: Actually runs the containers (Docker/containerd)
  • Pod: The smallest K8s unit; wraps 1 or more containers
CONFIG MANAGEMENT

Puppet vs. Ansible

While Terraform provisions the cloud infrastructure (the servers), Configuration Management tools install and configure the software inside those servers.

Feature Puppet Ansible
Architecture Agent-based (Puppet agent runs on every node) Agentless (connects via standard SSH)
Language Puppet DSL (Ruby-like, declarative) YAML (Playbooks, procedural/declarative mix)
Push vs Pull Pull (Agents pull configs from Master) Push (Master pushes commands to nodes)
Learning Curve Steep (requires learning Puppet DSL) Very Low (simple YAML, Python-based)
Best For Large, static, complex enterprise environments Fast-moving, dynamic environments, CI/CD
CODE EXAMPLE

An Ansible Playbook

# playbook.yml - Install and start Nginx on all web servers

- name: Configure Web Servers
  hosts: web_group
  become: yes # Run as root (sudo)

  tasks:
    - name: Ensure Nginx is installed
      apt:
        name: nginx
        state: present
        update_cache: yes

    - name: Ensure Nginx is running and enabled on boot
      service:
        name: nginx
        state: started
        enabled: yes

Why it's powerful: Idempotency. You can run this playbook 100 times. If Nginx is already installed and running, Ansible does nothing. It only makes changes when the actual state differs from the desired state.

CASE STUDY

IBM's CI/CD Transformation

The Context

IBM Cloud Kubernetes Service (IKS) Team

IBM needed to build and manage a massive Kubernetes-as-a-Service platform. The engineering team was globally distributed. They faced a critical challenge: How do you ship code safely when hundreds of engineers are committing to the same monolithic codebase every day?

The Problem

Legacy pains

  • Deployments took 3-5 days to coordinate.
  • Testing was mostly manual, causing a massive QA bottleneck.
  • "Merge Hell" — integrating branches at the end of a sprint broke the build constantly.
The Solution

Aggressive CI/CD adoption

  • Microservices: Broke the monolith into smaller, independent services.
  • Jenkins & Travis CI: Fully automated pipelines for every service.
  • Shift-Left Testing: Developers wrote unit tests; pipeline blocked merges without 80% coverage.
THE RESULTS

The ROI of IBM's DevOps adoption

From Days
to Minutes

Deployment time shrank drastically, allowing multiple deployments per day per microservice.

99%
Reduction in bugs

Automated regression testing caught defects before they ever reached production.

Culture Shift
Developer Autonomy

Developers no longer waited for "Ops" to deploy; the pipeline handled the heavy lifting.

The ultimate lesson from IBM: Tools like Kubernetes and Jenkins were essential, but the real transformation was cultural — mandating test-driven development and forcing small, incremental commits instead of massive monthly releases.

WRAP-UP

Summary & what's next

Lecture 13 · Key Takeaways

What you should remember

  • Tool Selection: Prioritize integration, APIs, and community over raw feature lists.
  • Containers vs VMs: Containers share the OS kernel, making them lightweight and fast. VMs run full guest OSes.
  • Kubernetes (K8s): Orchestrates containers at scale. Architecture splits into Control Plane (API, Scheduler, etcd) and Worker Nodes (Kubelet, Pods).
  • Puppet vs Ansible: Puppet is agent-based and declarative. Ansible is agentless (SSH) and uses simple YAML playbooks.
  • IBM Case Study: Moving to microservices and automated CI/CD pipelines reduced deployment time from days to minutes.
Next Lecture · Lecture 14

Tue, 07 Jul 2026 · 12:00–13:00 · Unit V

Hands-on: Setting up CI/CD Pipelines; Hands-on: Infrastructure Automation in practice.

Prep for next class

Get ready to code

We will be looking at terminal workflows for Git, GitHub Actions, and basic Ansible. Familiarize yourself with YAML syntax.

CSDV3017 · DEVOPS
SHEET 01/12